/*
 * TermSerializer.h
 *
 *  Created on: Nov 26, 2012
 *      Author: m
 */

#ifndef TERMSERIALIZER_H_
#define TERMSERIALIZER_H_

#include "VariableStringSerializer.h"
#include "Serializer.h"
#include "../file_system/Term.h"

namespace physical
{

class TermSerializer: public Serializer< Term >
{
public:

    /**
     * Constructor por Defecto
     */
    TermSerializer();

    /**
     * Destructor
     */
    virtual ~TermSerializer();

    /**
     * Serializa un Term
     *
     * @param element Term a serializar
     * @param block Array de bytes en donde se serializa el elemento
     * @return Cantidad de bytes escritos en el block
     */
    size_t serialize( const Term& element, byteStream block );

    /**
     * Deserializa un Term
     *
     * @param block Array de bytes donde está serializado el elemento
     * @param element Referencia al elemento deserializado
     * @return Cantidad de bytes utilizados de block para deserializar
     */
    size_t deserialize( const byteStream block, Term& element );

    /**
     * Devuelve la cantidad de bytes que ocupa el elemento al ser serializado
     *
     * @param element Elemento a probar
     * @return Cantidad de bytes que ocuparía el elemento serializado
     */
    size_t getSize( const Term& element );

protected:
    VariableStringSerializer m_stringSerializer;
};

} /* namespace physical */
#endif /* TERMSERIALIZER_H_ */
